package com.baoyouqun.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baoyouqun.entity.FileInfoLocal;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * 文件存储服务接口
 */
public interface IFileStorageService extends IService<FileInfoLocal> {

    /**
     * 上传文件
     *
     * @param file       上传的文件
     * @param bucket     存储桶
     * @param uploaderId 上传者ID
     * @return 文件信息
     */
    FileInfoLocal upload(MultipartFile file, String bucket, Long uploaderId) throws IOException;

    /**
     * 下载文件
     *
     * @param fileId 文件ID
     * @return 文件输入流
     */
    InputStream download(Long fileId) throws IOException;

    /**
     * 删除文件
     *
     * @param fileId 文件ID
     * @return 是否删除成功
     */
    boolean delete(Long fileId);

    /**
     * 获取文件信息
     *
     * @param fileId 文件ID
     * @return 文件信息
     */
    FileInfoLocal getFileInfoLocal(Long fileId);

    /**
     * 分页查询文件
     *
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @param bucket   存储桶（可选）
     * @param fileName 文件名（可选，模糊查询）
     * @param fileType 文件类型（可选）
     * @return 分页结果
     */
    IPage<FileInfoLocal> queryFiles(int pageNum, int pageSize, String bucket, String fileName, String fileType);

    /**
     * 计算文件MD5值
     *
     * @param file 文件
     * @return MD5值
     */
    String calculateFileMd5(MultipartFile file) throws IOException;
}
